(use srfi-9)
(load "sala2.scm")
(load "mapa.scm")

;define a estrutura do personagem segundo a sefi-9
(define-record-type personagem
  (pers nome descri itens sala-atual)
  pers?
  (nome nome set-nome!)
  (descri descri det-descri!)
  (itens item set-item!)
  (sala-atual atual set-atual!)
  )

(define p1 (pers "Eduardo" "Estudante" '("lanterna") s14))


;;função que verifica se o personagem tem um determinado item na mão
(define tem-item?
  (lambda (personagem item-procu)
    (if (pers? personagem)
        (let verif-item ((lista (item personagem)))
          (if (null? lista)
              '()
              (if (string-ci=? (car lista) item-procu)
                  #t
                  (verif-item (cdr lista))))
          #f))))


;;adiciona um item ao personagem
(define add-item-pers
  (lambda (personagem item-add)
    (if (> (length (item personagem)) 20)
        #f
        (begin
          (set-item! p1 (cons item-add (item personagem)))
          #t))))


;;remove um item de um personagem caso tenha e retorna true. Caso não, retorna false
(define rm-item-pers
  (lambda (personagem item-rm)
    (let proc-item ((lista (item personagem))
                    (lista2 '()))
      (if (null? lista) ;;se a lista for nula, retorna '()
          (begin
            (set-item! personagem lista2)
            #f)
          (if (not (string-ci=? (car lista) item-rm)) ;;se o car da lista não for igual ao item
              (begin
                (set! lista2 (cons (car lista) lista2)) ;;adiciona o car da lista a lista 2
                (proc-item (cdr lista) lista2))
              (begin
                (set-item! personagem (append lista2 (cdr lista)))
                #t)
              )))))
              


;;movimentação personagem
(define move
  (lambda (personagem direcao)
    (if (string-ci=? direcao "n")
        (let ((prox-sala (get-sala mapa (+ (x (atual p1)) 0) (+ (y (atual p1)) -1))))
          (if (null? prox-sala)
              "Não há saída por aí"
              (set-atual! p1 prox-sala)))
        (if (string-ci=? direcao "s")
            (let ((prox-sala (get-sala mapa (+ (x (atual p1)) 0) (+ (y (atual p1)) 1))))
              (if (null? prox-sala)
                  "Não há saída por aí"
                  (set-atual! p1 prox-sala)))
            (if (string-ci=? direcao "l")
                (let ((prox-sala (get-sala mapa (+ (x (atual p1)) 1) (+ (y (atual p1)) 0))))
                  (if (null? prox-sala)
                      "Não há saída por aí"
                      (set-atual! p1 prox-sala)))
                (if (string-ci=? direcao "o")
                    (let ((prox-sala (get-sala mapa (+ (x (atual p1)) -1) (+ (y (atual p1)) 0))))
                      (if (null? prox-sala)
                          "Não há saída por aí"
                          (set-atual! p1 prox-sala)))
                      "Não entendi o comando"))))))











           